package com.guochu.common.enums;

/**
 * 错误码列表
 *
 * <p> 所有开发人员的错误码请严格按照规范书写
 * 当使用时发现没有定义此错误常量，请自行定义，如有定义直接使用
 *
 * <p>200 一切 ok 正确执行后的返回
 * A0001 用户端错误 一级宏观错误码
 * A0100 用户注册错误 二级宏观错误码
 * A0110 用户名校验失败
 * A0111 用户名已存在
 * A0112 用户名包含敏感词
 * A0113 用户名包含特殊字符
 * A0120 密码校验失败
 * A0121 密码长度不够
 * A0122 密码强度不够
 * A0130 校验码输入错误
 * A0131 短信校验码输入错误
 * A0132 邮件校验码输入错误
 * A0140 用户证件异常
 * A0141 用户证件类型未选择
 * A0142 大陆身份证编号校验非法
 * A0150 用户基本信息校验失败
 * A0151 手机格式校验失败
 * A0152 地址格式校验失败
 * A0153 邮箱格式校验失败
 * A0200 用户登陆异常 二级宏观错误码
 * A0201 用户账户不存在
 * A0202 用户账户被冻结
 * A0203 用户账户已作废
 * A0210 用户密码错误
 * A0211 用户输入密码次数超限
 * A0220 用户身份校验失败
 * A0221 用户指纹识别失败
 * A0223 用户未获得第三方登陆授权
 * A0230 用户登陆已过期
 * A0240 用户验证码错误
 * A0241 用户验证码尝试次数超限
 * A0300 访问权限异常 二级宏观错误码
 * A0301 访问未授权
 * A0302 正在授权中
 * A0303 用户授权申请被拒绝
 * A0310 因访问对象隐私设置被拦截
 * A0311 授权已过期
 * A0312 无权限使用 API
 * A0320 用户访问被拦截
 * A0321 黑名单用户
 * A0322 账号被冻结
 * A0323 非法 IP 地址
 * A0324 网关访问受限
 * A0325 地域黑名单
 * A0330 服务已欠费
 * A0340 用户签名异常
 * A0341 RSA 签名错误
 * A0400 用户请求参数错误 二级宏观错误码
 * A0401 包含非法恶意跳转链接
 * A0402 无效的用户输入
 * A0410 请求必填参数为空
 * A0413 缺少时间戳参数
 * A0414 非法的时间戳参数
 * A0420 请求参数值超出允许的范围
 * A0421 参数格式不匹配
 * A0422 地址不在服务范围
 * A0423 时间不在服务范围
 * A0424 金额超出限制
 * A0425 数量超出限制
 * A0426 请求批量处理总个数超出限制
 * A0427 请求 JSON 解析失败
 * A0430 用户输入内容非法
 * A0431 包含违禁敏感词
 * A0440 用户操作异常
 * A0441 用户支付超时
 * A0442 确认订单超时
 * A0443 订单已关闭
 * A0500 用户请求服务异常 二级宏观错误码
 * A0501 请求次数超出限制
 * A0502 请求并发数超出限制
 * A0503 用户操作请等待
 * A0504 WebSocket 连接异常
 * A0505 WebSocket 连接断开
 * A0506 用户重复请求
 * A0600 用户资源异常 二级宏观错误码
 * A0601 账户余额不足
 * -
 * -
 * A0700 用户上传文件异常 二级宏观错误码
 * A0701 用户上传文件类型不匹配
 * A0702 用户上传文件太大
 * A0703 用户上传图片太大
 * A0704 用户上传视频太大
 * A0705 用户上传压缩文件太大
 * A0805 用户 API 请求版本不匹配
 * A0806 用户 API 请求版本过高
 * A0807 用户 API 请求版本过低
 * A0900 用户隐私未授权 二级宏观错误码
 * A0901 用户隐私未签署
 * A0902 用户摄像头未授权
 * A0903 用户相机未授权
 * A0904 用户图片库未授权
 * A0905 用户文件未授权
 * A0906 用户位置信息未授权
 * A0907 用户通讯录未授权
 * A1000 用户设备异常 二级宏观错误码
 * -
 * -
 * A1004 用户扬声器异常
 * A1005 用户 GPS 定位异常
 * -
 * -
 * B0001 系统执行出错 一级宏观错误码
 * B0100 系统执行超时 二级宏观错误码
 * B0101 系统订单处理超时
 * B0200 系统容灾功能被触发 二级宏观错误码
 * B0210 系统限流
 * B0220 系统功能降级
 * B0300 系统资源异常 二级宏观错误码
 * B0310 系统资源耗尽
 * B0311 系统磁盘空间耗尽
 * B0312 系统内存耗尽
 * B0313 文件句柄耗尽
 * B0314 系统连接池耗尽
 * B0315 系统线程池耗尽
 * B0320 系统资源访问异常
 * B0321 系统读取磁盘文件失败
 * -
 * -
 * C0001 调用第三方服务出错 一级宏观错误码
 * C0100 中间件服务出错 二级宏观错误码
 * C0110 RPC 服务出错
 * C0111 RPC 服务未找到
 * C0112 RPC 服务未注册
 * C0113 接口不存在
 * C0120 消息服务出错
 * C0121 消息投递出错
 * C0122 消息消费出错
 * C0123 消息订阅出错
 * C0124 消息分组未查到
 * -
 * -
 * C0130 缓存服务出错
 * C0131 key 长度超过限制
 * C0132 value 长度超过限制
 * C0133 存储容量已满
 * C0134 不支持的数据格式
 * C0140 配置服务出错
 * C0150 网络资源服务出错
 * C0151 VPN 服务出错
 * C0152 CDN 服务出错
 * C0153 域名解析服务出错
 * C0154 网关服务出错
 * C0200 第三方系统执行超时 二级宏观错误码
 * C0210 RPC 执行超时
 * C0220 消息投递超时
 * C0230 缓存服务超时
 * C0240 配置服务超时
 * C0250 数据库服务超时
 * C0300 数据库服务出错 二级宏观错误码
 * C0311 表不存在
 * C0312 列不存在
 * C0321 多表关联中存在多个相同名称的列
 * C0331 数据库死锁
 * C0341 主键冲突
 * C0400 第三方容灾系统被触发 二级宏观错误码
 * C0401 第三方系统限流
 * C0402 第三方功能降级
 * C0500 通知服务出错 二级宏观错误码
 * C0501 短信提醒服务失败
 * C0502 语音提醒服务失败
 * C0503 邮件提醒服务失败
 *
 * @author bunting.wei
 * @since 2020-12-15 15:48:27
 */
public enum ErrorEnum {
    //参考阿里的返回信息
    A_FILE_ERROR("A0700","用户上传文件异常"),
    A_USER_EXISTS("A0111","用户已存在"),
    A_ACCOUNT_NOT_EXISTS("A0201","用户账户不存在"),
    A_MUST_PARAMETER("A0410","请求必填参数为空"),
    A_DATA_ERROR("A0421","参数格式不匹配"),

    B_SYSTEM_ERROR("B0001","系统执行出错"),

    //自定义的返回信息
    Z_ROLE_EXISTS("Z0001","角色已存在"),
    Z_DEPARTMENT_EXISTS("Z0002","部门已存在"),
    Z_POST_EXISTS("Z0003","岗位已存在"),
    Z_DICTIONARY_EXISTS("Z0004","字典项已存在"),
    Z_SORT_EXISTS("Z0005","序号已存在"),
    Z_MENUURL_EXISTS("Z0006","菜单地址已存在"),
    Z_DICTIONARY_CHILDREN_EXISTS("Z0007","字典项子项已存在"),
    Z_PLUG_EXISTS("Z0008","插件编码已存在"),
    Z_PROJECT_EXISTS("Z0009","项目已存在"),
    Z_TASK_EXISTS("Z0010","任务已存在"),
    Z_BUTTON_EXISTS("Z0011","该菜单下按钮已存在"),

    Z_FILE_NOT_EXISTS("Z0101","文件不存在"),
    Z_DICTIONARY_NOT_EXISTS("Z0102","字典项不存在"),
    Z_File_MODEL("Z0201","请按模板文件导入"),
    ;


    /**
     * 错误码
     */
    private String code;

    /**
     * 错误信息
     */
    private String msg;

    private ErrorEnum(String code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }

    @Override
    public String toString() {
        return super.toString() + " code:" + code + ", msg:" + msg;
    }
}
